package com.linx.open.domain;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;

import java.util.List;

@Data
public class HikVisAccessControlEventForm {

    /**
     * 通知方法名称
     */
    private String method;

    /**
     * 通知方法参数
     */
    private Params params;



    /**
     * 通知方法参数
     */
    @lombok.Data
    public static class Params {

        /**
         * 通知方法名称
         * 默认事件类通知名称为”OnEventNotify”
         */
        private String ability;

        /**
         * 事件消息列表
         */
        private List<Events> events;

        /**
         * 事件发送时间
         */
        private String sendTime;
    }

    /**
     * 事件消息
     */
    @lombok.Data
    public static class Events {
        /**
         * 事件详情
         */
        private Data data;

        /**
         * 事件的唯一id
         */
        private String eventId;

        /**
         * 事件类型码
         */
        private int eventType;

        /**
         * 事件产生时间
         */
        private String happenTime;

        /**
         * 子类indexCode
         */
        private String srcIndex;

        /**
         * 设备名称
         */
        private String srcName;

        /**
         * 资源indexCode
         */
        private String srcParentIndex;

        /**
         * 资源类型
         */
        private String srcType;

        /**
         * 事件状态
         * 0-瞬时
         * 1-开始
         * 2-停止
         * 3-事件脉冲
         * 4-事件联动结果更新
         * 5-异步图片上传
         */
        private int status;

        /**
         * 脉冲超时时间
         */
        private int timeout;

    }


    /**
     * 事件详情
     */
    @Getter
    @Setter
    public static class Data {

        /**
         * 人员通道号
         */
        private int ExtAccessChannel;

        /**
         * 报警输入/防区通道
         */
        private int ExtEventAlarmInID;

        /**
         * 报警输出通道
         */
        private int ExtEventAlarmOutID;

        /**
         * 卡号
         */
        private String ExtEventCardNo;

        /**
         * 事件输入通道
         */
        private int ExtEventCaseID;

        /**
         * 事件类型代码
         */
        private int ExtEventCode;

        /**
         * 通道事件信息
         */
        private ExtEventCustomerNumInfo extEventCustomerNumInfo;

        /**
         * 门编号
         */
        private int ExtEventDoorID;

        /**
         * 身份证图片URL
         */
        private String ExtEventIDCardPictureURL;

        /**
         * 人员身份证信息
         */
        private ExtEventIdentityCardInfo extEventIdentityCardInfo;

        /**
         * 进出方向
         * 1：进
         * 0：出
         * -1:未知
         * 要求：进门读卡器拨码设置为1，出门读卡器拨码设置为2
         */
        private int ExtEventInOut;

        /**
         * 就地控制器id
         * 就地控制器编号,0-门禁主机,1-255代表就地控制器
         */
        private int ExtEventLocalControllerID;

        /**
         * 主设备拨码
         */
        private int ExtEventMainDevID;

        /**
         * 人员编号
         */
        private String ExtEventPersonNo;

        /**
         * 图片的url
         */
        private String ExtEventPictureURL;

        /**
         * 读卡器id
         */
        private int ExtEventReaderID;

        /**
         * 读卡器类别
         */
        private int ExtEventReaderKind;

        /**
         * 报告上传通道
         * 1-布防上传
         * 2-中心组1上传
         * 3-中心组2上传
         * 0-无效
         */
        private int ExtEventReportChannel;

        /**
         * 群组编号
         */
        private int ExtEventRoleID;

        /**
         * 分控制器硬件ID
         */
        private int ExtEventSubDevID;

        /**
         * 刷卡次数
         */
        private int ExtEventSwipNum;

        /**
         * 事件类型
         */
        private int ExtEventType;

        /**
         * 多重认证序号
         */
        private int ExtEventVerifyID;

        /**
         * 白名单单号
         */
        private int ExtEventWhiteListNo;

        /**
         * 事件上报驱动的时间
         */
        private String ExtReceiveTime;

        /**
         * 事件流水号
         */
        private int Seq;

        /**
         * 用户类型
         * 人员类型：0 未知，1 普通，2 来宾，3 黑名单，4 管理员
         */
        private int UserType;

        /**
         * 图片服务器唯一编码
         */
        private String svrIndexCode;
    }

    /**
     * 人员身份证信息
     */
    @lombok.Data
    public static class ExtEventIdentityCardInfo {

        /**
         * 住址
         */
        private String address;

        /**
         * 出生日期
         */
        private String birth;

        /**
         * 有效日期结束时间
         */
        private String endDate;

        /**
         * 身份证id
         */
        private String idNum;

        /**
         * 签发机关
         */
        private String issuingAuthority;

        /**
         * 姓名
         */
        private String name;

        /**
         * 民族
         */
        private int nation;

        /**
         * 性别
         * 0-未知
         * 1-男
         * 2-女
         */
        private int sex;

        /**
         * 有效日期开始时间
         * 格式：yyyy-MM-dd
         * 例： “2018-10-12”
         */
        private String startDate;

        /**
         * 是否长期有效
         * 0-否（有效截止日期有效）
         * 1-是（有效截止日期无效）
         */
        private int termOfValidity;

    }

    /**
     * 通道事件信息
     */
    @lombok.Data
    public static class ExtEventCustomerNumInfo {

        /**
         * 通道号
         */
        private int accessChannel;

        /**
         * 进人数
         */
        private int entryTimes;

        /**
         * 出人数
         */
        private int exitTimes;

        /**
         * 总通行人数
         */
        private int totalTimes;

    }
}
